package com.miplus.ccrm.core.api.fastgpt.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * FastGPT API聊天请求实体
 * headers.Authorization: Bearer {{apikey}}
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ChatRequest {
    /**
     * 聊天ID，为undefined时不使用FastGpt上下文功能，完全通过messages构建上下文
     * 为非空字符串时使用chatId进行对话，自动从FastGpt数据库取历史记录
     * 请自行确保chatId唯一，长度小于250，通常可以是自己系统的对话框ID
     */
    private String chatId;

    /**
     * 是否使用流式响应，默认为false
     */
    private Boolean stream = false;

    /**
     * 是否返回中间值（模块状态，响应的完整结果等）
     * stream模式下会通过event进行区分，非stream模式结果保存在responseData中
     */
    private Boolean detail = false;

    /**
     * 响应消息的ID，FastGPT会自动将该ID存入数据库
     * 请确保，在当前chatId下，responseChatItemId是唯一的
     */
    private String responseChatItemId;

    /**
     * 模块变量，会替换模块中输入框内容里的{{key}}
     */
    private Map<String, String> variables;

    /**
     * 消息列表，结构与GPT接口chat模式一致
     */
    private List<Message> messages;

    /**
     * 消息实体
     */
    @Data
    public static class Message {
        /**
         * 角色，user、assistant等
         */
        private String role = "user";
        /**
         * 消息内容
         */
        private String content;
    }
}